package com.pandy.juc;


/**
 * DCL + volatile 实现单例模式
 */
public class Code01_VolatielSingleton {

    // volatile声明 禁止指令重排序
    private static volatile Code01_VolatielSingleton instance;
    private Code01_VolatielSingleton() {}
    /**
     * 获取Code01_VolatielSingleton实例
     * 使用双重检查锁定确保线程安全且高效
     *
     * @return Code01_VolatielSingleton的单实例
     */
    public static Code01_VolatielSingleton getInstance() {
        // 第一次检查实例是否已存在，避免不必要的同步操作
        if (instance == null) {
            // 同步代码块，确保在多线程环境下的安全性
            synchronized (Code01_VolatielSingleton.class) {
                // 第二次检查实例是否已存在，防止多个线程同时通过第一层检查
                if (instance == null) {
                    // 创建实例，确保只有一个线程能执行到这一步
                    instance = new Code01_VolatielSingleton();
                }
            }
        }
        // 返回实例，可能是在同步代码块中创建的
        return instance;
    }




}
